package utils

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
)

// filepath中的函数兼容各个操作系统，涉及到windows系统路径操作时，应该使用filepath包

/*
通过 container/list 包的 New 方法初始化 list
变量名 := list.New()

通过声明初始化list
var 变量名 list.List
*/

func ListDir(dirPath string) []string {
	files := []string{}

	dirPath = posixPath(dirPath)
	dir, err := ioutil.ReadDir(dirPath)
	if err != nil {
		fmt.Println(err)
		return nil
	}

	for _, fi := range dir {
		if fi.IsDir() {
			continue
		}

		files = append(files, fi.Name())
	}
	return files
}

//获取指定目录下的所有文件，不进入下一级目录搜索，可以匹配后缀过滤。
func ListDirEx(dirPath string, suffix string) []string {
	files := []string{}

	dirPath = posixPath(dirPath)
	dir, err := ioutil.ReadDir(dirPath)
	if err != nil {
		fmt.Println(err)
		return nil
	}

	suffix = strings.ToUpper(suffix) //忽略后缀匹配的大小写
	for _, fi := range dir {
		if fi.IsDir() {
			continue
		}

		//判断字符串是否以suffix结尾
		if strings.HasSuffix(strings.ToUpper(fi.Name()), suffix) {
			files = append(files, fi.Name())
		}
	}
	return files
}

func posixPath(basePath string) string {
	if strings.Contains(basePath, "\\") {
		basePath = strings.ReplaceAll(basePath, "\\", "/")
	}
	return basePath
}

// https://www.cnblogs.com/jkko123/p/6923962.html
func WalkDir(dirPath string) map[string]string {
	items := make(map[string]string)

	dirPath = posixPath(dirPath)
	filepath.Walk(dirPath,
		func(path string, fi os.FileInfo, err error) error {
			file_name := fi.Name()
			items[file_name] = path
			return nil
		})

	return items
}

func ScanDir(dirPath string) {
	dirPath = posixPath(dirPath)
	db := ConnectMysql()
	filepath.Walk(dirPath,
		func(path string, fi os.FileInfo, err error) error {
			file_name := fi.Name()
			AddItem(db, file_name, path)
			return nil
		})
	fmt.Println("Scan Done")
}
